#pragma once

#include<sstream>
#include<random>
#include<google/protobuf/map.h>

class Utils
{
    public:
        static unsigned int random_char(){
            std::random_device rd;
            std::mt19937 gen(rd());
            std::uniform_int_distribution<> dis(0,255);
            return dis(gen);
        }
        //生产唯一UUID
        static std::string generate_hex(const unsigned int len)
        {
            std::stringstream ss;
            for(auto i =0;i<len;i++)
            {
                const auto rc = random_char();
                std::stringstream hexstream;
                hexstream<<std::hex<<rc;
                auto hex = hexstream.str();
                ss<<(hex.length()<2?'0'+hex:hex);
            }
            return ss.str();
        }
         static void map_copy(google::protobuf::Map<std::string,std::string>* target,
                            const google::protobuf::Map<std::string,std::string> &source)
        {
            if(nullptr == target)
            {
                std::cout<<"map_copy warning, target is nullptr!"<<std::endl;
                return ;
            }
            for(auto it = source.cbegin();it!=source.cend();++it)
            {
                target->insert({it->first,it->second});
            }
        }
};